﻿#define _CRT_SECURE_NO_WARNINGS 1
//#include <stdio.h>
//int main()
//{
//    int n = 0;
//    int t = 0;
//    scanf("%d", &n);
//    if (n % 12 != 0)
//    {
//         t = n % 12 * 4 + 2;
//    }
//    else
//        t = 2;
//    printf("%d\n", t);
//    return 0;
// }
//#include <stdio.h>
//int main()
//{
//    char ch = 0;
//    while ((ch = getchar()) != EOF)
//    {
//        if (ch >= 'A' && ch <= 'Z')
//        {
//            ch = ch + 32;
//            printf("%c\n");
//        }
//    }
//    return 0;
//}
//#include <stdio.h>
//int main()
//{
//    int ch = 0;
//    while ((ch = getchar()) != EOF)
//     //getchar(),读入函数的一种，会从标准输入中读取下一个字符，返回类型为int
//    {
//        if (ch >= 'A' && ch <= 'Z')
//        {
//            ch = ch + 32;
//            printf("%c\n",ch);
//        }
//    }
//    return 0;
//}
//#include <stdio.h>
//int main()
//{
//    int ch;
//    while ((ch = getchar()) != EOF)
//    {
//        if (ch >= 'A' && ch <= 'Z')
//        {
//            ch = ch + 32;
//        }
//        printf("%c\n", ch);
//        getchar();//去掉\n
//    }
//    return 0;
//    //结束进程，按ctrl+Z
//}
//打印一个数的每一位
//#include<stdio.h>
//void print(int n)
//{
//	if (n / 10 != 0)
//		print(n/10);
//
//	printf("%d ", n % 10);
//}
//int main()
//{
//	int n = 0;
//	scanf("%d", &n);
//	print(n);
//	return 0;
//}
//递归和非递归分别实现求n的阶乘（不考虑溢出的问题）
//非递归
//#include<stdio.h>
//int main()
//{
//	int n = 0;
//	int sub = 1;
//	scanf("%d", &n);
//	for (int i = 1; i <= n; i++)
//	{
//		sub *= i;
//	}
//	printf("%d", sub);
//	return 0;
//}
//递归
//#include<stdio.h>
//int sub = 1;
//int get_sub(int n)
//{
//	if (n > 2)
//		get_sub(n - 1);
//
//	sub *= n;
//}
//int main()
//{
//	int n = 0;
//	scanf("%d", &n);
//	get_sub(n);
//	printf("%d", sub);
//	return 0;
//}
//递归和非递归分别实现strlen
//非递归
//#include <stdio.h>
//int my_strlen(char* arr)
//{
//	int count = 0;
//	while (*arr != '\0')
//	{
//		count++;
//		arr++;
//	}
//	return count;
//}
//int main()
//{
//	char arr[20] = { 0 };
//	scanf("%s",&arr);
//	int len=my_strlen(arr);
//	printf("%d", len);
//	return 0;
//}
//#include<stdio.h>
//int my_strlen(char* arr)
//{
//	int count = 0;
//	while (*arr != '\0')
//	{
//		count++;
//		arr++;
//	}
//	return count;
//}
//int main()
//{
//	char arr[20] = { 0 };
//	scanf("%s", arr);
//	int len=my_strlen(arr);
//	printf("%d", len);
//	return 0;
//}
//递归
//#include <stdio.h>
//int my_strlen(char* arr)
//{
//	if (*arr != '\0')
//	{
//		return 1 + my_strlen(arr + 1);
//	}
//	else
//		return 0;
//}
//int main()
//{
//	char arr[20] = { 0 };
//	scanf("%s", arr);
//	int len=my_strlen(arr);
//	printf("%d", len);
//	return 0;
//}
/*编写一个函数 reverse_string(char * string)（递归实现）

实现：将参数字符串中的字符反向排列，不是逆序打印。

要求：不能使用C函数库中的字符串操作函数。*/
//#include <stdio.h>
//#include<string.h>
//void reverse_string(char* arr)
//{
//	int len = strlen(arr);
//	char* left = arr;
//	char* right = arr + len - 1;
//
//	while (left < right)
//	{
//		char tem = *left;
//		*left = *right;
//		*right = tem;
//		left++;
//		right--;
//	}
//
//}
//int main()
//{
//	char arr[] = "abcdef";
//	reverse_string(arr);
//
//	printf("%s ", arr);
//	return 0;
//}
//非递归
/*编写一个函数 reverse_string(char * string)（递归实现）

实现：将参数字符串中的字符反向排列，不是逆序打印。

要求：不能使用C函数库中的字符串操作函数。*/
//#include<stdio.h>
//#include<string.h>
//void reverse_string(char arr[])
//{
//	int len = strlen(arr);
//	int left = 0;
//	int right = len - 1;
//
//	while (left < right)
//	{
//		char tem = arr[left];
//		arr[left] = arr[right];
//		arr[right] = tem;
//		left++;
//		right--;
//	}
//}
//int main()
//{
//	char arr[] = "abcdef";
//	reverse_string(arr);
//	printf("%s", arr);
//	return 0;
//}
/*编写一个函数 reverse_string(char * string)（递归实现）

实现：将参数字符串中的字符反向排列，不是逆序打印。

要求：不能使用C函数库中的字符串操作函数。*/
//#include<stdio.h>
//int my_strlen(char* arr)
//{
//	int count = 0;
//	while (*arr != '\0')
//	{
//		count++;
//		arr++;
//	}
//	return count;
//}
//void reverse_string(char* arr)
//{
//	int len = my_strlen(arr);
//	char tem = * arr;
//	*arr = *(arr + len - 1);
//	*(arr + len - 1) = '\0';
//	if (my_strlen(arr + 1) >= 2)
//		reverse_string(arr + 1);
//	*(arr + len - 1) = tem;
//
//}
//int main()
//{
//	char arr[] = "abcdef";
//	reverse_string(arr);
//	printf("%s ", arr);
//	return 0;
//}
/*写一个递归函数DigitSum(n)，输入一个非负整数，返回组成它的数字之和*/
//#include<stdio.h>
//int sum = 0;
//int DigitSum(int n)
//{
//	sum =sum + n % 10;
//	if(n/10!=0)
//		DigitSum(n / 10);
//
//	return sum;
//}
//int main()
//{
//	unsigned int n = 0;
//	scanf("%d", &n);
//	int res=DigitSum(n);
//	printf("%d ", res);
//	return 0;
//}
/*编写一个函数实现n的k次方，使用递归实现。*/
#include <stdio.h>
double power(int n, int k)
{
	if (k > 0)
		return n * power(n, k - 1);
	else if(k < 0)
		return 1.0/ power(n,-k);
	else
		return 1;
}
int main()
{
	int n = 0;
	int k = 0;
	printf("请输入n=", n);
	scanf("%d", &n);
	printf("请输入k=", k);
	scanf("%d", &k);
	double res=power(n, k);
	printf("%lf\n", res);
	return 0;

}